package cn.itcast.itcaststore.dao;

import cn.itcast.itcaststore.domain.OrderItem;
import cn.itcast.itcaststore.domain.Orders;
import cn.itcast.itcaststore.domain.Products;

import java.sql.SQLException;
import java.util.List;

public interface ProductDao {
    /**
     * 下载销售榜单
     *
     * @param year
     * @param month
     * @return
     */
    List<Object[]> salesList(String year, String month) throws SQLException;

    /**
     * 分页并根据分类查询商品
     *
     * @param currentPage  当前页码
     * @param currentCount 每页显示条数
     * @param category     分类的类别
     * @return Products的集合
     * @throws SQLException sql异常
     */
     List<Products> findProductByPage(int currentPage, int currentCount, String category);

    /**
     * 查询当前分类下数据的个数
     *
     * @param category 分类的类别
     */
    int findProductTotalCount(String category);


    void changeProductNum(Orders order) throws SQLException;

    /**
     * 根据下列条件筛选商品
     *
     * @param id       :商品id
     * @param name     ：商品名称
     * @param category ：商品类别
     * @param minprice ：最小价格
     * @param maxprice ：最大价格
     * @return
     * @throws SQLException
     */
    List<Products> findProductByManyCondition(String id, String name, String category, String minprice, String maxprice) throws SQLException;


    /**
     * 模糊查询该书的个数
     *
     * @param searchfield 书名
     * @return int 图书数量
     */
    int findTotalCountByName(String searchfield);

    /**
     * 分页并根据分类查询商品
     *
     * @param currentPage  当前页码
     * @param currentCount 每页显示条数
     * @param searchfield  书名
     * @return Products的集合
     */
    List<Products> findProductByNameByPage(int currentPage, int currentCount, String searchfield);

    /**
     * 查询本周热卖的商品
     * @return
     */
    List<Object[]> getWeekHotProduct();

    /**
     * 查找所有商品
     */
    List<Products> listAll() throws SQLException;


    Products findProductById(String id) throws SQLException;

    /**
     * 添加商品
     * @param p
     */
    void addProduct(Products p) throws SQLException;

    /**
     * 修改商品信息
     * @param p
     */
    void editProduct(Products p) throws SQLException;

    /**
     * 后台系统,根据id删除商品信息
     * @param id
     */
    void deleteProduct(String id) throws SQLException;
/*
* 删除订单时修改订单数量
* */
    void updateProductNum(List<OrderItem> items) throws SQLException;
}
